package com.glory.erp.invoice.order.action;

import java.util.List;

import com.glory.erp.invoice.goods.bean.Goods;
import com.glory.erp.invoice.goods.service.GoodsService;
import com.glory.erp.invoice.goodstype.bean.GoodsType;
import com.glory.erp.invoice.goodstype.service.GoodsTypeService;
import com.glory.erp.invoice.order.service.OrderService;
import com.glory.erp.invoice.order.bean.Order;
import com.glory.erp.invoice.order.bean.OrderQuery;
import com.glory.erp.invoice.orderdetail.bean.OrderDetail;
import com.glory.erp.invoice.store.bean.Store;
import com.glory.erp.invoice.store.service.StoreService;
import com.glory.erp.invoice.supplier.bean.Supplier;
import com.glory.erp.invoice.supplier.service.SupplierService;
import com.glory.erp.auth.base.BaseAction;
import com.glory.erp.auth.emp.bean.Emp;
import com.glory.erp.auth.emp.service.EmpService;

/**
 * 
 * @Description: 订单
 * @Title: OrderAction.java
 * @Author: 樊双峰
 * @Date: 2018年5月28日 下午10:11:11
 * @Version V1.0
 */
public class OrderAction extends BaseAction{
	
	public Order order = new Order();
	public OrderQuery orderQuery = new OrderQuery();
	public Long supplierUuid;
	public Long goodsTypeUuid;
	public Long goodsUuid;
	
	public Long[] goodsUuids;
	public Integer[] nums;
	public Double[] prices;
	public Integer num;
	public Long storeUuid;
	public Long orderDetailUuid;

	private OrderService orderService;
	private SupplierService supplierService;
	private GoodsTypeService goodsTypeService;
	private GoodsService goodsService;
	private EmpService empService;
	private StoreService storeService;
	
	private List<GoodsType> goodsTypeList;
	private List<Goods> goodsList;
	private Goods goods;
	private OrderDetail orderDetail;
	
	public OrderDetail getOrderDetail() {
		return orderDetail;
	}

	public Goods getGoods() {
		return goods;
	}

	public List<GoodsType> getGoodsTypeList() {
		return goodsTypeList;
	}

	public List<Goods> getGoodsList() {
		return goodsList;
	}

	public void setStoreService(StoreService storeService) {
		this.storeService = storeService;
	}

	public void setEmpService(EmpService empService) {
		this.empService = empService;
	}

	public void setGoodsService(GoodsService goodsService) {
		this.goodsService = goodsService;
	}

	public void setGoodsTypeService(GoodsTypeService goodsTypeService) {
		this.goodsTypeService = goodsTypeService;
	}

	public void setSupplierService(SupplierService supplierService) {
		this.supplierService = supplierService;
	}

	public void setOrderService(OrderService orderService) {
		this.orderService = orderService;
	}

	//列表
	public String list(){
		setDataTotal(orderService.getCount(orderQuery));
		List<Order> orderList = orderService.findAll(orderQuery,pageNum,pageCount);
		put("orderList", orderList);
		return LIST;
	}

	//到添加
	public String addView(){
		if(order.getUuid()!=null){
			order = orderService.findById(order.getUuid());
		}
		return ADD;
	}

	//添加
	public String saveAndUpdate(){
		if(order.getUuid() == null){
			orderService.save(order);
		}else{
			orderService.update(order);
		}
		return TO_LIST;
	}

	//删除
	public String delete(){
		orderService.delete(order);
		return TO_LIST;
	}
	
	/*------------------------采购相关--------------------------*/
	
	/**
	 * 
	 * @Description: 跳转订单页面
	 * @Title: buyList
	 * @Author: 樊双峰
	 * @Param: @return
	 * @return: String
	 * @Date: 2018年5月27日 下午5:13:38
	 * @throws
	 */
	public String buyList(){
		setDataTotal(orderService.getCount(orderQuery));
		List<Order> orderList = orderService.findAllBuy(orderQuery,pageNum,pageCount);
		put("orderList", orderList);
		return "buyList";
	}
	
	/**
	 * 
	 * @Description: 跳转至新增采购订单页面
	 * @Title: buyAddView
	 * @Author: 樊双峰
	 * @Param: @return
	 * @return: String
	 * @Date: 2018年5月26日 下午11:06:53
	 * @throws
	 */
	public String buyAddView(){
		// 供应商
		List<Supplier> supplierList = supplierService.findAllUnionTwo();
		// 供应商的类别
		List<GoodsType> goodsTypeList = goodsTypeService.findAllUnionBySupplier(supplierList.get(0).getUuid());
		// 类别的商品
		List<Goods> goodsList = goodsService.findAllByGoodsType(goodsTypeList.get(0).getUuid());
		put("supplierList", supplierList);
		put("goodsTypeList", goodsTypeList);
		put("goodsList", goodsList);
		return "buyAdd";
	}
	
	/**
	 * 
	 * @Description: 保存采购订单
	 * @Title: buySave
	 * @Author: 樊双峰
	 * @Param: @return
	 * @return: String
	 * @Date: 2018年5月31日 上午12:16:52
	 * @throws
	 */
	public String buySave(){
		/*System.out.println(order.getSupplier().getUuid());
		System.out.println("----------------");
		for(Long a:goodsUuids){
			System.out.println(a);
		}
		System.out.println("----------------");
		for(Integer a:nums){
			System.out.println(a);
		}
		System.out.println("----------------");
		for(Double a:prices){
			System.out.println(a);
		}
		System.out.println("----------------");
		System.out.println(getLogin().getUserName());*/
		orderService.saveBuyOrder(order,goodsUuids,nums,prices,getLogin());
		return "toBuyList";
	}
	
	/**
	 * 
	 * @Description: 查看采购订单详情明细
	 * @Title: buyDetail
	 * @Author: 樊双峰
	 * @Param: @return
	 * @return: String
	 * @Date: 2018年6月5日 下午11:08:32
	 * @throws
	 */
	public String buyDetail(){
		order = orderService.findById(order.getUuid());
		return "buyDetail";
	}
	
	/*------------------------采购审核相关--------------------------*/
	
	public String buyCheckList(){
		setDataTotal(orderService.getCountBuyCheck(orderQuery));
		List<Order> orderList = orderService.findAllBuyCheck(orderQuery,pageNum,pageCount);
		put("orderList", orderList);
		return "buyCheckList";
	}
	
	public String buyCheckDetail(){
		order = orderService.findById(order.getUuid());
		return "buyCheckDetail";
	}
	
	/**
	 * 
	 * @Description: 采购审核通过
	 * @Title: buyCheckPass
	 * @Author: 樊双峰
	 * @Param: @return
	 * @return: String
	 * @Date: 2018年6月7日 下午10:44:10
	 * @throws
	 */
	public String buyCheckPass(){
		orderService.buyCheckPass(order.getUuid(),getLogin());
		return "toBuyCheckList";
	}
	
	/**
	 * 
	 * @Description: 采购审核不通过(驳回)
	 * @Title: buyCheckNoPass
	 * @Author: 樊双峰
	 * @Param: @return
	 * @return: String
	 * @Date: 2018年6月7日 下午11:03:37
	 * @throws
	 */
	public String buyCheckNoPass(){
		orderService.buyCheckNoPass(order.getUuid(),getLogin());
		return "toBuyCheckList";
	}
	
	/*------------------------运输任务相关--------------------------*/
	
	/**
	 * 
	 * @Description: 任务指派列表
	 * @Title: taskList
	 * @Author: 樊双峰
	 * @Param: @return
	 * @return: String
	 * @Date: 2018年6月8日 下午9:54:52
	 * @throws
	 */
	public String taskList(){
		setDataTotal(orderService.getCountTask(orderQuery));
		List<Order> orderList = orderService.findAllTask(orderQuery,pageNum,pageCount);
		put("orderList", orderList);
		return "taskList";
	}
	
	/**
	 * 
	 * @Description: 任务指派明细
	 * @Title: taskDetail
	 * @Author: 樊双峰
	 * @Param: @return
	 * @return: String
	 * @Date: 2018年6月8日 下午9:55:18
	 * @throws
	 */
	public String taskDetail(){
		// 加载运输部门的员工信息
		List<Emp> empList = empService.findByDept(getLogin().getDept().getUuid());
		put("empList", empList);
		order = orderService.findById(order.getUuid());
		return "taskDetail";
	}
	
	/**
	 * 
	 * @Description: 指派任务
	 * @Title: assignTask
	 * @Author: 樊双峰
	 * @Param: @return
	 * @return: String
	 * @Date: 2018年6月8日 下午10:29:48
	 * @throws
	 */
	public String assignTask(){
		// order中包含了两个数据order.uuid  order.completer.uuid
		orderService.assignTask(order.getUuid(),order.getCompleter());
		return "toTaskList";
	}
	
	/**
	 * 
	 * @Description: 查询当前登录人运输任务
	 * @Title: tasks
	 * @Author: 樊双峰
	 * @Param: @return
	 * @return: String
	 * @Date: 2018年6月8日 下午11:36:42
	 * @throws
	 */
	public String tasks(){
		// 当前登录人查询的任务只能查询自己的任务，所以查询条件中要设置条件，跟单人为登录人
		// 状态值，开发中要进行设置，为了安全性
		setDataTotal(orderService.getCountTask(orderQuery,getLogin()));
		List<Order> orderList = orderService.findAllTask(orderQuery,pageNum,pageCount,getLogin());
		put("orderList", orderList);
		return "tasks";
	}
	
	/**
	 * 
	 * @Description: 任务查询详情
	 * @Title: task
	 * @Author: 樊双峰
	 * @Param: @return
	 * @return: String
	 * @Date: 2018年6月9日 上午12:04:17
	 * @throws
	 */
	public String task(){
		order = orderService.findById(order.getUuid());
		return "task";
	}
	
	/**
	 * 
	 * @Description: 结单 任务完成
	 * @Title: endTask
	 * @Author: 樊双峰
	 * @Param: @return
	 * @return: String
	 * @Date: 2018年6月9日 上午12:16:19
	 * @throws
	 */
	public String endTask(){
		orderService.endTask(order.getUuid());
		return "toTasks";
	}
	
	/*------------------------入库相关--------------------------*/
	
	/**
	 * 
	 * @Description: 入库列表展示
	 * @Title: inStoreList
	 * @Author: 樊双峰
	 * @Param: @return
	 * @return: String
	 * @Date: 2018年6月9日 下午12:42:17
	 * @throws
	 */
	public String inStoreList(){
		setDataTotal(orderService.getCountInStore(orderQuery));
		List<Order> orderList = orderService.findAllInStore(orderQuery,pageNum,pageCount);
		put("orderList", orderList);
		return "inStoreList";
	}
	
	/**
	 * 
	 * @Description: 跳转至入库明细页面
	 * @Title: inStoreDetail
	 * @Author: 樊双峰
	 * @Param: @return
	 * @return: String
	 * @Date: 2018年6月9日 下午12:40:37
	 * @throws
	 */
	public String inStoreDetail(){
		// 加载所有仓库信息
		List<Store> storeList = storeService.findAll();
		put("storeList", storeList);
		order = orderService.findById(order.getUuid());
		return "inStoreDetail";
	}
	
	/*------------------------ajax相关--------------------------*/
	
	/**
	 * 
	 * @Description: ajax根据供应商的uuid获取类别和商品信息
	 * @Title: ajaxGetGoodsTypeAndGoods
	 * @Author: 樊双峰
	 * @Param: @return
	 * @return: String
	 * @Date: 2018年5月26日 下午11:37:28
	 * @throws
	 */
	public String ajaxGetGtAndG(){
		goodsTypeList = goodsTypeService.findAllUnionBySupplier(supplierUuid);
		goodsList = goodsService.findAllByGoodsType(goodsTypeList.get(0).getUuid());
		goods = goodsList.get(0);
		return "ajaxGetGtAndG";
	}
	// 已经使用过的，需要过滤的商品uuid
	public String used;		// '11','22','33'
	// 具有数据过滤功能
	public String ajaxGetGtAndG2(){
		goodsTypeList = goodsTypeService.findAllUnionBySupplier(supplierUuid);
		/*
		 * 由于商品类别中的第一个类别的所有商品已经使用完毕，而没有将其删除，
		 * 导致该商品类别对应的商品集合，在下面的迭代过程中没有商品，抛出索引越界异常
		 * 
		 * 解决：删除掉对应的商品类别即可
		 */
		Good:
		for (int i = goodsTypeList.size()-1; i >= 0; i--) {
			List<Goods> goodsListTemp = goodsService.findAllByGoodsType(goodsTypeList.get(i).getUuid());
			for (Goods goodsTemp : goodsListTemp) {
				// 如果传过来的used里面不包含该类别下面的商品，也就是说该类别下面还有商品没有被使用过
				// 那就保留该类别，直接跳出判断
				if(!used.contains("'"+goodsTemp.getUuid()+"'")){
					// 保留该类别，直接判断下一个类别
					continue Good;
				}
			}
			// 循环执行完毕，执行到此处，说明里面的商品都被使用过，那就删除类别
			goodsTypeList.remove(i);
		}
		
		goodsList = goodsService.findAllByGoodsType(goodsTypeList.get(0).getUuid());
		// 当前获取的商品信息的uuid具有重复的，要对其过滤
		// 对集合进行迭代删除，逆向迭代
		// 从goodsList中取出所有的元素，挨个迭代，与本次传递过来的used进行比对，重复的，删除
		for (int i = goodsList.size()-1; i >= 0; i--) {
			// 取出所有商品的uuid
			Long uuid = goodsList.get(i).getUuid();
			// 判断该uuid是否出现在used中，重复就remove
			if(used.contains("'"+uuid+"'")){
				goodsList.remove(i);
			}
		}
		goods = goodsList.get(0);
		return "ajaxGetGtAndG";
	}
	
	/**
	 * 
	 * @Description: ajax根据商品类别的uuid获取商品信息
	 * @Title: ajaxGetGoods
	 * @Author: 樊双峰
	 * @Param: @return
	 * @return: String
	 * @Date: 2018年5月27日 下午4:05:47
	 * @throws
	 */
	public String ajaxGetGoods(){
		goodsList = goodsService.findAllByGoodsType(goodsTypeUuid);
		for (int i = goodsList.size()-1; i >= 0; i--) {
			// 取出所有商品的uuid
			Long uuid = goodsList.get(i).getUuid();
			// 判断该uuid是否出现在used中，重复就remove
			if(used.contains("'"+uuid+"'")){
				goodsList.remove(i);
			}
		}
		goods = goodsList.get(0);
		return "ajaxGetGoods";
	}
	
	/**
	 * 
	 * @Description: ajax根据商品信息的uuid获取商品价格信息
	 * @Title: ajaxGetPrice
	 * @Author: 樊双峰
	 * @Param: @return
	 * @return: String
	 * @Date: 2018年5月27日 下午5:15:44
	 * @throws
	 */
	public String ajaxGetPrice(){
		goods = goodsService.findById(goodsUuid);
		return "ajaxGetPrice";
	}
	
	/**
	 * 
	 * @Description: 入库操作
	 * @Title: ajaxInGoods
	 * @Author: 樊双峰
	 * @Param: @return
	 * @return: String
	 * @Date: 2018年6月9日 下午3:13:55
	 * @throws
	 */
	public String ajaxInGoods(){
		orderDetail = orderService.inGoods(storeUuid,orderDetailUuid,num,getLogin());
		return "ajaxInGoods";
	}
}